/*
  独立的路由模块
*/
const express = require('express')
const utility = require('utility')
const jwt = require('jsonwebtoken')
const path = require('path')
const router = express.Router()
const db = require(path.join(__dirname, '../common/db.js'))

// 注册用户
router.post('/reguser', async (req, res) => {
  // 1、获取参数，判断参数是否为null
  let params = req.body
  if (!params.username) {
    return res.json({
      status: 1,
      message: '用户名不能为空'
    })
  }
  if (!params.password) {
    return res.json({
      status: 1,
      message: '密码不能为空'
    })
  }

  // 判断数据库中是否已经存在该用户
  let checkSql = 'select id from myuser where username = ?'
  let state = await db.operateDb(checkSql, params.username)
  if (state && state.length > 0) {
    return res.json({
      status: 1,
      message: '用户名已经存在'
    })
  }

  // 2、插入到数据库
  // 在把密码存入数据库之前进行加密处理
  params.password = utility.md5(params.password)
  let sql = 'insert into myuser set ?'
  let ret = await db.operateDb(sql, params)
  // 3、判断插入数据库是否成功
  if (ret.affectedRows > 0) {
    // 插入成功
    res.json({
      status: 0,
      message: '注册用户成功'
    })
  } else {
    // 插入失败
    res.json({
      status: 1,
      message: '注册用户失败'
    })
  }
})

// 用户登录
router.post('/login', async (req, res) => {
  // 1、获取参数
  let params = req.body
  params.password = utility.md5(params.password)
  // 2、查询数据库验证合法性
  let sql = 'select id from myuser where username = ? and password = ?'
  let ret = await db.operateDb(sql, [params.username, params.password])
  // 3、判断结果并返回
  if (ret && ret.length > 0) {
    // 验证合法，需要针对该用户生成一个token，返回给客户端
    // jwt.sign方法的参数
    // 参数一：表示在token中携带的数据，这个数据一般携带用户的唯一标识，这个数据可以反解
    // 参数二：加密token的干扰字符串（盐）
    // 参数三：token的配置信息，比如设置token的有效期
    let token = jwt.sign({id: ret[0].id, username: params.username}, 'bigevent', {expiresIn: '2 days'})
    res.json({
      status: 0,
      message: '登录成功',
      token: 'Bearer ' + token
    })
  } else {
    // 不合法
    res.json({
      status: 1,
      message: '用户名或者密码错误'
    })
  }
})


// 定义了一个路由
// router.get('/data', async (req, res) => {
//   let sql = 'select * from myuser'
//   let ret = await db.operateDb(sql, null)
//   res.send(ret)
// })

module.exports = router
